//TIPS:		
//DS:数据段,可能包含,变量,全局变量,静态函数表？
//SS:堆栈数据段,主要用来表示堆栈空间	

_asm
{
	PUSH EBX
	MOV EBX,DWORD PTR DS:[<&KERNEL32.Sleep>]		//将kernel32.Sleep函数指针存入EBX
	PUSH ESI
	PUSH EDI
	MOV EDI,DWORD PTR DS:[<&MSVCR80,printf>]		//将MSVCR80.printf函数指针存入EDI
	NOP
	PUSH 8		//创建一个类需要的空间,8代表变量一共有8个字节
	CALL win32Ctr.??2@YAPAXI@Z		//new 调用某个类的构造函数,返回值在eax中,为某个类的指针
	ADD ESP,4		//构造函数自身的堆栈平衡
	TEST EAX,EAX		//标志位置0 这段代码不知道什么用
	MOV DWORD PTR SS:[EBP-4],EAX		//自己添加的代码,往栈的一个变量中进行复赋值
	JE SHORT win32Ctr.0040102F		//这段代码不知道什么用
	MOV DWORD PTR DS:[EAX],5		//类的第一个变量赋值5，变量大小为DWORD 变量a
	MOV DWORD PTR DS:[EAX+4],5		//类的第二个变量赋值5，变量大小为DWORD 变量b
	MOV ESI,EAX		//ESI存储类指针
	JMP SHORT win32Ctr.4004031		//跳转下下面的指令
	XOR ESI,ESI		//此条指令未使用
	MOV EAX,DWORD PTR DS:[ESI+4]		//跳转到的指令, eax = b;
	ADD EAX,DWORD PTR DS:[ESI]		// eax += a 即 eax = b + a;
	PUSH EAX
	PUSH OFFSET win32Ctr.??%#%#@$#@$@%		//字符串xxxx%d
	CALL EDI		//调用printf("xxxx%d",eax);
	ADD ESP,8		//函数自动的堆栈平衡
	PUSH 3E8
	CALL EBX		//调用的Sleep(0x3E8)
	PUSH 23		//被优化掉的过程，原来应该为 eax = 0x11 + 0x12 , push eax;
	PUSH OFFSET win32Ctr.??%*(#&(@))		//字符串xxxx%d
	MOV DWORD PTR DS[ESI],11		//未优化的代码 a = 0x11;
	MOV DWORD PTR DS[ESI+4],12		//未优化的代码 b = 0x12;
	CALLL EDI		//printf....
	PUSH ESI
	CALL win32Ctr.??3@YAYPAX@Z		//delete函数,删除ESI
	ADD ESP,0C		//函数自己调用的堆栈平衡
	JMP SHORT win32Ctr.LTEST		//跳转到上面开始无限循环
}